package com.example.springbootlinmtest.utils;

import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.ReadListener;
import com.example.springbootlinmtest.pojo.UserInfo;
import lombok.extern.flogger.Flogger;
import lombok.extern.slf4j.Slf4j;

/**
 * 模板的读取类
 *
 * @author Jiaju Zhuang
 */
// 有个很重要的点 DemoDataListener 不能被spring管理，要每次读取excel都要new,然后里面用到spring可以构造方法传进去
@Slf4j
public class UploadDataListener implements ReadListener<UserInfo> {
    /**
     * 缓存数据
     */
    private final List<UserInfo> cachedDataList = new ArrayList<>();


    /**
     * 这个每一条数据解析都会来调用
     *
     * @param data    one row value. Is is same as {@link AnalysisContext#readRowHolder()}
     */
    @Override
    public void invoke(UserInfo data, AnalysisContext context) {
        cachedDataList.add(data);
    }

    /**
     * 所有数据解析完成了 都会来调用
     *
     */
    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        // 这里也要保存数据，确保最后遗留的数据也存储到数据库
        log.info("所有数据解析完成！");
        excelList();
    }

    public List<UserInfo> excelList(){
        return cachedDataList;
    }


//    public HashMap<String, Object> analyzeData() {
//        //单次完成课时数
//
//        UserInfo maxTotal = cachedDataList.stream().max(Comparator.comparingInt(userInfo -> Integer.parseInt(userInfo.getSuccessfulClassNum()))).orElse(null);
//        assert maxTotal != null;
//        int totalNum = Integer.parseInt(maxTotal.getSuccessfulClassNum());
//        log.info("最大完成课时数:=={}",totalNum);
//
//        int total = cachedDataList.size();
//        log.info("total=={}",total);
//        //月参与人数初始化
//        int joinNum = 0;
//        //总课时数获取
//        int totalClassNum = total* totalNum;
//        log.info("总课时数为:=={}",totalClassNum);
//        //完成课时数初始化
//        int finishClass = 0;
//        //全部完成人数初始化
//        int finishAllNum = 0;
//        for (UserInfo userInfo : cachedDataList) {
//
//            finishClass = finishClass + Integer.parseInt(userInfo.getSuccessfulClassNum());
//            if (Integer.parseInt(userInfo.getSuccessfulClassNum()) > 0) {
//                //月参与人数
//                joinNum++;
//            }
//            if (Integer.parseInt(userInfo.getSuccessfulClassNum())== totalNum){
//                //全部完成人数初始化
//                finishAllNum++;
//            }
//        }
//        log.info("完成课时数=={}",finishClass);
//        log.info("参与人数=={}",joinNum);
//        log.info("完成全部课时人数=={}",finishAllNum);
//
//        //格式化小数
//        DecimalFormat df = new DecimalFormat("0.00");
//        String percentClassFinish = df.format(((double) finishClass/totalClassNum)*100.00)+"%";
//        log.info("完课率:{}",percentClassFinish);
//
//        String percentJoin = df.format(((double) joinNum / total)*100.00)+"%";
//        log.info("参与:{}",percentJoin);
//
//        String percentDepth = df.format(((double) finishAllNum / total)*100.00)+"%";
//        log.info("深度:{}",percentDepth);
//
//        HashMap<String, Object> hashMap = new HashMap<>();
//        if (totalNum == 2){
//            log.info("当周数据");
//            hashMap.put("数据类型","本周数据");
//        }else{
//            hashMap.put("数据类型","本月数据");
//        }
//        hashMap.put("所属老师",cachedDataList.get(0).getTeacherIp());
//        hashMap.put("总人数",total);
//        hashMap.put("完成课时数",finishClass);
//        hashMap.put("参与人数",joinNum);
//        hashMap.put("完成全部课时人数",finishAllNum);
//        hashMap.put("完课率",percentClassFinish);
//        hashMap.put("参与率",percentJoin);
//        hashMap.put("深度",percentDepth);
//        return hashMap;
//    }

}